
import Schema from 'async-validator';

const RegRule = {
    // 用户名正则，4到16位（字母，数字，下划线，减号）
    username: /^[a-zA-Z0-9_-]{4,16}$/,
    // 密码强度正则，最少6位，包括至少1个大写字母，1个小写字母，和1个数字，1个特殊字符
    password: /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/,
    // 验证码 4到16位（字母，数字，下划线，减号）
    captcha: /^[a-zA-Z0-9]{4}$/,
    // 正整数
    posint: /^\d+$/,
    // 负整数
    negint: /^-\d+$/,
    // 整数
    int: /^-?\d+$/,
    // 正数
    posnumber: /^\d*\.?\d+$/,
    // 负数
    negnumber: /^-\d*\.?\d+$/,
    // 数字
    number: /^-?\d*\.?\d+$/,
    // email
    email: /^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$/,
    // url
    url: '',
    // ip4
    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
    // QQ号（5至11位）
    qq: /^[1-9][0-9]{4,10}$/,
    // 微信号（6至20位，以字母开头，字母，数字，减号，下划线）
    wechat: /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/,
    // 手机号
    mobile: /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/,
    // 身份证（18位）
    idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
    // 车牌号
    carno: /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/,
    // 包含中文
    cn: /[\u4E00-\u9FA5]/,
}

const EsValidate = (formData, formRules) => {
    return new Promise((reslove, reject) => {
        const validator = new Schema(formRules);
        // 表单校验
        validator.validate(formData, (errors) => {
            if (errors) {
                reject(errors);
                return;
            }
            reslove();
        });
    })
}

export { RegRule, EsValidate };